from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
from user_management.models import UserGroup, Role, Permission, Menu
from cmdb.models import Environment, HostType, HostGroup

User = get_user_model()


class Command(BaseCommand):
    help = '初始化系统基础数据'

    def handle(self, *args, **options):
        self.stdout.write('开始初始化系统数据...')
        
        # 创建环境
        environments = [
            {'name': '开发环境', 'description': '开发测试环境'},
            {'name': '测试环境', 'description': '功能测试环境'},
            {'name': '预生产环境', 'description': '预生产验证环境'},
            {'name': '生产环境', 'description': '生产运行环境'},
        ]
        
        for env_data in environments:
            env, created = Environment.objects.get_or_create(
                name=env_data['name'],
                defaults=env_data
            )
            if created:
                self.stdout.write(f'创建环境: {env.name}')
        
        # 创建主机类型
        host_types = [
            {'name': 'Web服务器', 'description': 'Web应用服务器'},
            {'name': '数据库服务器', 'description': '数据库服务器'},
            {'name': '缓存服务器', 'description': 'Redis/Memcached服务器'},
            {'name': '负载均衡器', 'description': '负载均衡服务器'},
            {'name': '监控服务器', 'description': '监控系统服务器'},
        ]
        
        for type_data in host_types:
            host_type, created = HostType.objects.get_or_create(
                name=type_data['name'],
                defaults=type_data
            )
            if created:
                self.stdout.write(f'创建主机类型: {host_type.name}')
        
        # 创建主机组
        host_groups = [
            {'name': 'Web集群', 'description': 'Web服务器集群'},
            {'name': '数据库集群', 'description': '数据库服务器集群'},
            {'name': '缓存集群', 'description': '缓存服务器集群'},
        ]
        
        for group_data in host_groups:
            group, created = HostGroup.objects.get_or_create(
                name=group_data['name'],
                defaults=group_data
            )
            if created:
                self.stdout.write(f'创建主机组: {group.name}')
        
        # 创建用户组
        user_groups = [
            {'name': '系统管理员', 'description': '系统管理员组'},
            {'name': '运维工程师', 'description': '运维工程师组'},
            {'name': '开发工程师', 'description': '开发工程师组'},
            {'name': '测试工程师', 'description': '测试工程师组'},
        ]
        
        for group_data in user_groups:
            group, created = UserGroup.objects.get_or_create(
                name=group_data['name'],
                defaults=group_data
            )
            if created:
                self.stdout.write(f'创建用户组: {group.name}')
        
        # 创建角色
        roles = [
            {'name': '超级管理员', 'description': '拥有所有权限的超级管理员'},
            {'name': '系统管理员', 'description': '系统管理权限'},
            {'name': '运维管理员', 'description': '运维管理权限'},
            {'name': '普通用户', 'description': '普通用户权限'},
        ]
        
        for role_data in roles:
            role, created = Role.objects.get_or_create(
                name=role_data['name'],
                defaults=role_data
            )
            if created:
                self.stdout.write(f'创建角色: {role.name}')
        
        # 创建权限
        permissions = [
            {'name': '用户管理', 'code': 'user_management', 'description': '用户管理权限', 'module': 'user'},
            {'name': '主机管理', 'code': 'host_management', 'description': '主机管理权限', 'module': 'cmdb'},
            {'name': 'SSH连接', 'code': 'ssh_connection', 'description': 'SSH连接权限', 'module': 'cmdb'},
            {'name': 'SQL审计', 'code': 'sql_audit', 'description': 'SQL审计权限', 'module': 'cmdb'},
            {'name': '系统监控', 'code': 'system_monitor', 'description': '系统监控权限', 'module': 'monitor'},
        ]
        
        for perm_data in permissions:
            perm, created = Permission.objects.get_or_create(
                code=perm_data['code'],
                defaults=perm_data
            )
            if created:
                self.stdout.write(f'创建权限: {perm.name}')
        
        # 创建菜单
        menus = [
            {'name': '仪表盘', 'path': '/', 'icon': 'House', 'sort_order': 1},
            {'name': '用户管理', 'path': '/user-management', 'icon': 'User', 'sort_order': 2},
            {'name': 'CMDB', 'path': '/cmdb', 'icon': 'Monitor', 'sort_order': 3},
        ]
        
        for menu_data in menus:
            menu, created = Menu.objects.get_or_create(
                path=menu_data['path'],
                defaults=menu_data
            )
            if created:
                self.stdout.write(f'创建菜单: {menu.name}')
        
        self.stdout.write(self.style.SUCCESS('系统数据初始化完成！'))
